
Adélia Cruz
Neural Network Developer

Seus tarefas de raspagem de web ou automação estão sendo bloqueadas por um AWS WAF (Firewall de Aplicativos Web) aparentemente insuperável? Este é um desafio comum para muitos desenvolvedores. O AWS WAF é um serviço de segurança poderoso da Amazon projetado para proteger sites contra explorações web comuns e bots maliciosos. Ele identifica e bloqueia atividades suspeitas analisando padrões de tráfego, usando métodos que incluem desafios de JavaScript (retornando um código de status 202) e captchas de imagem mais complexos (retornando um código de status 405).
Embora essas medidas de segurança sejam essenciais para a proteção do site, elas podem ser um grande obstáculo para scripts de automação legítimos. Felizmente, com as ferramentas certas, você pode contornar efetivamente essas proteções. Este guia fornecerá um passo a passo detalhado sobre como usar o Python e CapSolver para obter facilmente o aws-waf-token, permitindo acesso sem interrupções a sites protegidos pelo AWS WAF.
Antes de começar, certifique-se de ter as seguintes ferramentas e informações prontas:
Primeiro, precisamos instalar algumas bibliotecas Python importantes para fazer solicitações HTTP e analisar HTML. Abra seu terminal e execute o seguinte comando:
pip install capsolver requests beautifulsoup4
O seguinte é o código Python completo para resolver desafios e captchas do AWS WAF usando o CapSolver. Este código baseia-se nas práticas mais recentes da documentação oficial do CapSolver, possui uma estrutura mais limpa e lida automaticamente com os dois cenários mais comuns de bloqueio.
import capsolver
import requests
from bs4 import BeautifulSoup
import re
from urllib.parse import urlparse
# -------------------POR FAVOR MODIFIQUE ESTES VALORES-------------------
# Seus detalhes de proxy no formato: http://username:password@ip:port
PROXY = "http://username:password@ip:port"
# A URL do site alvo que você deseja resolver o AWS WAF
PAGE_URL = "https://www.seu-site-aws-protegido.com"
# Sua chave de API do CapSolver do painel
CAPSOLVER_API_KEY = "SUA_CHAVE_API"
# ----------------------------------------------------------------
def solve_aws_waf(is_captcha_challenge, **kwargs):
"""
Resolve um desafio AWS WAF ou captcha usando o CapSolver.
:param is_captcha_challenge: True para um captcha (código de status 405), False para um desafio de JS (código de status 202).
:param kwargs: Parâmetros necessários para a tarefa de resolução.
:return: O objeto de solução, ou None em caso de falha.
"""
task_type = "AntiAwsWafTask" if is_captcha_challenge else "AntiAwsWafTaskProxyLess"
print(f"Criando tarefa '{task_type}'...")
task_payload = {
"type": task_type,
"websiteURL": PAGE_URL,
}
# Adicione parâmetros específicos com base no tipo de desafio
if is_captcha_challenge:
# Para desafios de captcha, são necessários awsKey, awsIv, awsContext
task_payload.update({
"awsKey": kwargs.get("awsKey"),
"awsIv": kwargs.get("awsIv"),
"awsContext": kwargs.get("awsContext"),
"awsChallengeJS": kwargs.get("awsChallengeJS"),
"proxy": PROXY
})
else:
# Para desafios de JS, apenas a URL awsChallengeJS é necessária
task_payload["awsChallengeJS"] = kwargs.get("awsChallengeJS")
try:
solution = capsolver.solve(task_payload)
if solution and solution.get("errorId", 0) == 0:
print("Solução obtida com sucesso!")
return solution
else:
error_desc = solution.get('errorDescription', 'Erro desconhecido') if solution else 'Erro desconhecido'
print(f"Falha ao resolver a tarefa: {error_desc}")
return None
except Exception as e:
print(f"Ocorreu uma exceção ao chamar o CapSolver: {e}")
return None
def main():
"""Função principal para executar todo o processo."""
capsolver.api_key = CAPSOLVER_API_KEY
session = requests.Session()
session.proxies = {"http": PROXY, "https": PROXY}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
}
print(f"Tentando acessar: {PAGE_URL}")
response = session.get(PAGE_URL, headers=headers)
print(f"Código de status recebido: {response.status_code}")
solution = None
# Cenário 1: Tratar desafio JavaScript do AWS (Código de status 202)
if response.status_code == 202:
print("Desafio JavaScript do AWS detectado.")
soup = BeautifulSoup(response.content, 'html.parser')
script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
if script_tag:
challenge_js_url = script_tag['src']
print(f"Encontrada URL do desafio JS: {challenge_js_url}")
solution = solve_aws_waf(is_captcha_challenge=False, awsChallengeJS=challenge_js_url)
else:
print("Erro: Não foi possível encontrar o script de desafio AWS.")
# Cenário 2: Tratar Captcha do AWS (Código de status 405)
elif response.status_code == 405:
print("Captcha do AWS detectado.")
soup = BeautifulSoup(response.content, 'html.parser')
script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
script_text_tag = soup.find('script', string=re.compile('.*key.*'))
if script_tag and script_text_tag:
challenge_js_url = script_tag['src']
script_text = script_text_tag.string
key = re.search(r'"key":"(.*?)"', script_text).group(1)
iv = re.search(r'"iv":"(.*?)"', script_text).group(1)
context = re.search(r'"context":"(.*?)"', script_text).group(1)
print(f"Parâmetros extraídos: Chave={key[:5]}..., IV={iv[:5]}..., Contexto={context[:5]}...")
solution = solve_aws_waf(
is_captcha_challenge=True,
awsKey=key,
awsIv=iv,
awsContext=context,
awsChallengeJS=challenge_js_url
)
else:
print("Erro: Falha ao extrair todos os parâmetros necessários do captcha da página.")
# Se resolvido com sucesso, defina o cookie e tente novamente a solicitação
if solution and solution.get("cookie"):
aws_token = solution["cookie"]
print(f"Obtido com sucesso o aws-waf-token: {aws_token[:30]}...")
domain = f".{urlparse(PAGE_URL).netloc}"
session.cookies.set("aws-waf-token", aws_token, domain=domain)
print("Cookie definido. Tentando novamente a solicitação...")
final_response = session.get(PAGE_URL, headers=headers)
print(f"Código de status da solicitação final: {final_response.status_code}")
if final_response.status_code == 200:
print("Bypass do AWS WAF realizado com sucesso!")
# print(final_response.text) # Remova o comentário para ver o conteúdo da página
else:
print("A solicitação falhou após definir o cookie. Verifique o token ou o proxy.")
else:
print("Falha ao resolver o AWS WAF. Saindo.")
if __name__ == "__main__":
main()
Antes de executar o código, certifique-se de modificar as seguintes variáveis:
PROXY: Substitua esta variável pelo endereço e credenciais do seu servidor proxy. O formato deve ser http://username:password@ip:port.CAPSOLVER_API_KEY: Encontre sua chave de API no Painel do CapSolver e substitua o espaço reservado.PAGE_URL: Substitua esta variável pela URL do site alvo protegido pelo AWS WAF.Ao integrar o CapSolver ao seu fluxo de automação Python, você pode lidar efetivamente com desafios de JavaScript e captchas disparados pelo AWS WAF. Este método simplifica um processo de verificação complexo em uma única chamada de API, permitindo que você se concentre na lógica do seu negócio em vez de se envolver em uma batalha constante com tecnologias anti-bot. Esta é uma solução valiosa para qualquer desenvolvedor que precise interagir com sites protegidos pelo AWS WAF.
Use o código de bônus CAPN ao recarregar sua conta do CapSolver para obter um bônus adicional de 5% em cada recarga — sem limites.
Redeeme-o agora no seu Painel do CapSolver
Q1: Por que devo usar um proxy?
A1: O AWS WAF monitora estritamente o comportamento dos endereços IP. Solicitações de centros de dados ou IPs marcados como suspeitos são facilmente bloqueadas. Usar um proxy de alta qualidade residencial ou de ISP imita o comportamento de acesso de um usuário real e é um passo crítico para superar com sucesso o WAF.
Q2: Quanto tempo o aws-waf-token é válido?
A2: A validade deste token é geralmente muito curta, possivelmente apenas alguns minutos. Após a expiração do token, você precisa executar novamente o processo de verificação para obter um novo. É importante projetar uma lógica de atualização de token em seu aplicativo.
Q3: Qual é a diferença entre AntiAwsWafTask e AntiAwsWafTaskProxyLess?
A3: AntiAwsWafTask é usado para resolver o captcha do AWS, que requer um ambiente de navegador completo (normalmente visto com um código de status 405) e precisa de um proxy fornecido por você. AntiAwsWafTaskProxyLess é usado para o desafio mais simples de JavaScript (código de status 202), que é resolvido nos servidores do CapSolver e não requer que você forneça um proxy. Nosso código seleciona automaticamente o tipo de tarefa apropriado com base no código de status.
Q4: Este método funciona para todos os sites que usam o AWS WAF?
A4: Este método é eficaz para a maioria das configurações padrão do AWS WAF. No entanto, os proprietários de sites podem personalizar as regras do WAF, o que pode aumentar a dificuldade de contorná-las. Se você encontrar problemas, consulte a documentação ou o suporte do CapSolver. Diferentes desafios podem exigir estratégias diferentes.
Compare o AWS WAF vs desafios de CAPTCHA do Cloudflare. Aprenda como resolver o AWS WAF e o Cloudflare Turnstile para automação web com altas taxas de sucesso usando o CapSolver.

Domine a resolução de desafios CAPTCHA do Amazon AWS WAF na automação de navegador com estratégias especializadas. Aprenda a integrar o CapSolver para fluxos de automação sem interrupções e eficientes. Este guia aborda soluções baseadas em tokens e em classificação.
